﻿using System.Collections.Generic;
using NHibernate;
using Neturion.Dados;
using Neturion.IRepositorios;

namespace Neturion.Repositorios
{
    public class RepositorioRegistro : IRepositorioRegistro
    {
        public Registro Inserir(Registro registro)
        {
            registro.FimVigencia = registro.FimVigencia.HasValue
                                                ? registro.FimVigencia.GetValueOrDefault()
                                                : registro.FimVigencia;
            registro.InicioVigencia = registro.InicioVigencia.HasValue
                                                ? registro.InicioVigencia.GetValueOrDefault()
                                                : registro.InicioVigencia;

            GerenciadorBDConfigs.Instance.SessaoAtual().Save(registro);
            return registro;
        }

        public Registro Atualizar(Registro registro)
        {
            Registro tmpRegistro = ObterPorId(registro.RegistroId);
            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados
            tmpRegistro.DataExpedicao = tmpRegistro.DataExpedicao;
            tmpRegistro.FimVigencia = registro.FimVigencia.HasValue
                                                ? registro.FimVigencia.GetValueOrDefault()
                                                : registro.FimVigencia;
            tmpRegistro.InicioVigencia = registro.InicioVigencia.HasValue
                                                ? registro.InicioVigencia.GetValueOrDefault()
                                                : registro.InicioVigencia;
            tmpRegistro.NeturionLog = registro.NeturionLog;
            tmpRegistro.Numero = registro.Numero;
            tmpRegistro.OrgaoExpedidor = registro.OrgaoExpedidor;
            tmpRegistro.Pessoa = registro.Pessoa;
            tmpRegistro.TipoRegistro = registro.TipoRegistro;
            tmpRegistro.UfExpedidor = registro.UfExpedidor;

            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(tmpRegistro);
            return tmpRegistro;
        }

        public void Excluir(Registro registro)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(registro);
        }

        public IList<Registro> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(Registro));
            return criteria.List<Registro>() as List<Registro>;
        }

        public Registro ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<Registro>(id);
        }
    }
}